package service

import (
	"context"
	"devops-super/api"
	"devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IProductDeptConfig 部门产品配置服务接口
type IProductDeptConfig interface {
	// GetPageLst 分页获取部门产品配置列表
	GetPageLst(ctx context.Context, in *v1.ProductDeptConfigGetPageLstReq) (out *api.PageLstRes[*entity.AppProductDeptConfig], err error)
	// Add 新增部门产品配置
	Add(ctx context.Context, in *entity.AppProductDeptConfig) (err error)
	// Upt 更新部门产品配置
	Upt(ctx context.Context, in *entity.AppProductDeptConfig) (err error)
	// Del 删除部门产品配置
	Del(ctx context.Context, id int64) (err error)
	// GetOne 获取单条部门产品配置
	GetOne(ctx context.Context, id int64) (out *entity.AppProductDeptConfig, err error)
	// GetOptions 获取部门产品配置选项
	GetOptions(ctx context.Context, in *v1.ProductDeptConfigGetOptionsReq) (out *v1.ProductDeptConfigGetOptionsRes, err error)
	// GetGroupConfigs 获取配置组
	GetGroupConfigs(ctx context.Context, in *v1.GetProductDeptGroupConfigsReq) (out *v1.GetProductDeptGroupConfigsRes, err error)
	// SetGroupConfigs 保存配置组
	SetGroupConfigs(ctx context.Context, in *v1.SetProductDeptGroupConfigsReq) (err error)
	// GetConfigByKey 获取配置
	GetConfigByKey(ctx context.Context, productId, deptId int64, groupName, configKey string) (configValue string, err error)
}

var (
	localProductDeptConfig IProductDeptConfig
)

// ProductDeptConfig 获取部门产品配置服务实例
func ProductDeptConfig() IProductDeptConfig {
	if localProductDeptConfig == nil {
		panic("implement not found for interface IProductDeptConfig, forgot register?")
	}
	return localProductDeptConfig
}

// RegisterProductDeptConfig 注册部门产品配置服务实例
func RegisterProductDeptConfig(i IProductDeptConfig) {
	localProductDeptConfig = i
}
